package ru.spb.nicetu.altx.mnemo.extpoint.valuetypes;

import java.io.Serializable;

/**
 * Интерфейс "Именованных Классов-Оберток". <br>
 * Обеспечивает сохранение значения и именования "ТипаЗначения"
 * 
 * @author serg
 * @param <E>
 *          - оборачиваемый класс
 */
public interface ITemplateValueType<E> extends Serializable, Cloneable {
  E get();

  void set(E value);

  /**
   * @return класс сохраняемого в Обертке значения
   */
  @SuppressWarnings("unchecked")
  Class getType();

  /**
   * @return символическое имя "ТипаЗначения"
   */
  String getName();

  String getTypeName();

  ITemplateValueType<E> clone();

  //***************************************************************************
  //***************************************************************************
  // Названия свойств типов данных, используются в точке расширения по Типам **
  //***************************************************************************
  //***************************************************************************
  
  /**
   * Имя Свойства типа.
   * если true, то даное разрешает себя сохранять в файл (если 
   * paramConverterClass расширяет интерфейс IValueToBlobConverter)
   */
  public static final String PROPERTY_SAVE_TO_FILE = "SaveToFile";

  /**
   * Имя Свойства типа.
   * если true, то даное разрешает себя загружать из файла (если 
   * paramConverterClass расширяет интерфейс IBlobToValueConverter)
   */
  public static final String PROPERTY_LOAD_FROM_FILE = "LoadFromFile";

  

  /**
   * Имя Свойства типа.
   * если true, то даное разрешает открывать свои "пустые instance-ы" (не 
   * загруженные, со значениемв по-умолчанию) в своем Composite.
   */
  public static final String PROPERTY_OPEN_NULL_VALUE = "OpenNullValue";

}
